home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright (c) 1996 Silicon Graphics, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation for any purpose is hereby granted without fee,
- * provided that (i) the above copyright notices and this permission
- * notice appear in all copies of the software and related documentation,
- * and (ii) the name of Silicon Graphics may not be used in any
- * advertising or publicity relating to the software without the specific,
- * prior written permission of Silicon Graphics.
- *
- * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- *
- * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL,
- * INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY
- * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
- * OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- */
- /*
- * Misc utility routines.
- */
- #include <string.h>
- #include <GL/gl.h>
- #include "util.h"
-
- /*
- * Returns true if extension named 'name' is supported.
- */
- GLboolean QueryExtension(char *extName)
- {
- /*
- ** Search for extName in the extensions string. Use of strstr()
- ** is not sufficient because extension names can be prefixes of
- ** other extension names. Could use strtok() but the constant
- ** string returned by glGetString can be in read-only memory.
- */
- char *p = (char *)glGetString(GL_EXTENSIONS);
- char *end = p + strlen(p);
- while (p < end) {
- int n = strcspn(p, " ");
- if ((strlen(extName) == n) && (strncmp(extName, p, n) == 0)) {
- return GL_TRUE;
- }
- p += (n + 1);
- }
- return GL_FALSE;
- }
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <math.h>
- /*
- * Misc vector op routines.
- */
-
- float x_axis[] = { 1.0, 0.0, 0.0 };
- float y_axis[] = { 0.0, 1.0, 0.0 };
- float z_axis[] = { 0.0, 0.0, 1.0 };
- float nx_axis[] = { -1.0, 0.0, 0.0 };
- float ny_axis[] = { 0.0, -1.0, 0.0 };
- float nz_axis[] = { 0.0, 0.0, -1.0 };
-
- void norm(float v[3])
- {
- float r;
-
- r = sqrt( v[0]*v[0] + v[1]*v[1] + v[2]*v[2] );
-
- v[0] /= r;
- v[1] /= r;
- v[2] /= r;
- }
-
- float dot(float a[3], float b[3])
- {
- return (a[0]*b[0] + a[1]*b[1] + a[2]*b[2]);
- }
-
- void cross(float v1[3], float v2[3], float result[3])
- {
- result[0] = v1[1]*v2[2] - v1[2]*v2[1];
- result[1] = v1[2]*v2[0] - v1[0]*v2[2];
- result[2] = v1[0]*v2[1] - v1[1]*v2[0];
- }
-
- float length(float v[3])
- {
- float r = sqrt( v[0]*v[0] + v[1]*v[1] + v[2]*v[2] );
- return r;
- }
-